package Java8实战._3_Stream_用流收集数据._3_分组;

import Java8实战._3_Stream_用流收集数据.Dish;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class _1_多级分组 {

    public static void main(String[] args) {
        List<Dish> menu = Arrays.asList(
                new Dish("pork",false,800, Dish.Type.MEAT),
                new Dish("beef",false,700, Dish.Type.MEAT),
                new Dish("chicken", false, 400, Dish.Type.MEAT),
                new Dish("french fries", true, 530, Dish.Type.OTHER),
                new Dish("rice", true, 350, Dish.Type.OTHER),
                new Dish("season fruit", true, 120, Dish.Type.OTHER),
                new Dish("pizza", true, 550, Dish.Type.OTHER),
                new Dish("prawns", false, 300, Dish.Type.FISH),
                new Dish("salmon", false, 450, Dish.Type.FISH)
        );

        Map<Dish.Type, Map<Dish.CaloricLevel, List<Dish>>> collect = menu.stream()
                .collect(Collectors.groupingBy(Dish::getType,
                        Collectors.groupingBy(dish -> {
                            if (dish.getCalories() > 700) {
                                return Dish.CaloricLevel.FAT;
                            } else if (dish.getCalories() > 400) {
                                return Dish.CaloricLevel.NORMAL;
                            } else {
                                return Dish.CaloricLevel.DIET;
                            }
                        })
                ));

        for (Map.Entry<Dish.Type, Map<Dish.CaloricLevel, List<Dish>>> map : collect.entrySet()){
            System.out.println("菜品类型：" + map.getKey());

            for (Map.Entry<Dish.CaloricLevel, List<Dish>> map2 : map.getValue().entrySet()){
                System.out.println("\t菜品热量：" + map2.getKey());

                map2.getValue().stream()
                        .forEach(dish -> System.out.println("\t\t菜品名称：" + dish.getName() + ",热量：" + dish.getCalories()));
            }

            System.out.println("\n========================================\n");
        }
    }
}
